Hibernate হল একটি জনপ্রিয় ORM (Object-Relational Mapping) ফ্রেমওয়ার্ক যা ডাটাবেস টেবিলের মধ্যে অবজেক্ট সম্পর্ক (relationships) তৈরি করতে সহায়ক। Hibernate ব্যবহার করে বিভিন্ন সম্পর্ক (relationship) যেমন One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many ম্যাপিং করা যেতে পারে।
এখানে Hibernate-এ One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many সম্পর্কের ম্যাপিংয়ের বিস্তারিত আলোচনা করা হলো।
1. One-to-One Mapping
One-to-One Mapping এমন একটি সম্পর্ক যেখানে একটি অবজেক্ট অন্য একটি অবজেক্টের সাথে একে অপরের সাথে সম্পর্কিত থাকে। অর্থাৎ, একে অপরের সাথে এক একক সম্পর্ক থাকে।
Example: Employee এবং Address ক্লাসের মধ্যে একে অপরের সাথে সম্পর্ক।
- Entity Classes:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToOne
@JoinColumn(name = "address_id")
private Address address; // Employee has one Address
// Getters and setters
}
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String street;
private String city;
@OneToOne(mappedBy = "address")
private Employee employee; // Address belongs to one Employee
// Getters and setters
}
- Explanation:
@OneToOne: এটি সম্পর্কের ধরন নির্ধারণ করে, যেখানে একটিEmployeeএকটিমাত্রAddressএর সাথে সম্পর্কিত।@JoinColumn: এটি ডাটাবেসের সারণীতে একটিমাত্র কলাম তৈরি করে যা এই সম্পর্কটিকে মান্য করে।
2. One-to-Many Mapping
One-to-Many Mapping এমন একটি সম্পর্ক যেখানে একটি অবজেক্ট একাধিক অবজেক্টের সাথে সম্পর্কিত থাকে। এক্ষেত্রে, একটি Parent অবজেক্ট অনেকগুলো Child অবজেক্টের সাথে সম্পর্কিত থাকে।
Example: Department এবং Employee ক্লাসের মধ্যে সম্পর্ক, যেখানে একটিমাত্র Department অনেক Employee ধারণ করে।
- Entity Classes:
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@OneToMany(mappedBy = "department")
private Set<Employee> employees; // A department has many employees
// Getters and setters
}
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department; // An employee belongs to one department
// Getters and setters
}
- Explanation:
@OneToMany: এটি নির্ধারণ করে যে একটিDepartmentএকাধিকEmployeeধারণ করতে পারে।mappedBy: এটিEmployeeক্লাসেরdepartmentফিল্ডের মাধ্যমে সম্পর্কটি নির্দেশ করে।@ManyToOne: এটিEmployeeকেDepartmentএর সাথে সম্পর্কিত করে।
3. Many-to-One Mapping
Many-to-One Mapping একটি সম্পর্ক যেখানে একাধিক অবজেক্ট একটি একক অবজেক্টের সাথে সম্পর্কিত থাকে। এটি One-to-Many সম্পর্কের বিপরীত।
Example: Employee এবং Department ক্লাসের মধ্যে সম্পর্ক, যেখানে একাধিক Employee একটি Department এর সাথে সম্পর্কিত।
- Entity Classes:
@Entity
public class Employee {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department; // Multiple employees belong to one department
// Getters and setters
}
@Entity
public class Department {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// Getters and setters
}
- Explanation:
@ManyToOne: এটিEmployeeএর একাধিক ইনস্ট্যান্সকেDepartmentএর একটি ইনস্ট্যান্সের সাথে সম্পর্কিত করে।@JoinColumn: এটি সম্পর্কিত ডাটাবেস টেবিলের কলামটি নির্দেশ করে।
4. Many-to-Many Mapping
Many-to-Many Mapping একটি সম্পর্ক যেখানে একাধিক অবজেক্ট একাধিক অবজেক্টের সাথে সম্পর্কিত থাকে। অর্থাৎ, একটি Student একাধিক Course এর সাথে এবং একটি Course একাধিক Student এর সাথে সম্পর্কিত থাকে।
Example: Student এবং Course ক্লাসের মধ্যে সম্পর্ক, যেখানে একাধিক Student একাধিক Course গ্রহণ করতে পারে।
- Entity Classes:
@Entity
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private Set<Course> courses; // A student can enroll in multiple courses
// Getters and setters
}
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
@ManyToMany(mappedBy = "courses")
private Set<Student> students; // A course can have multiple students
// Getters and setters
}
- Explanation:
@ManyToMany: এটি একটি সম্পর্ক নির্দেশ করে যেখানে একাধিকStudentএকাধিকCourseএর সাথে সম্পর্কিত।@JoinTable: এটিstudent_courseনামক এক মাধ্যমিক টেবিল তৈরি করে, যেখানে দুটি টেবিলের (Student এবং Course) সম্পর্ক রক্ষা করা হয়।mappedBy: এটিCourseক্লাসের মধ্যে সম্পর্ক নির্দেশ করে।
Hibernate-এ One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many সম্পর্কের ম্যাপিং বেশ সহজ এবং শক্তিশালী। বিভিন্ন সম্পর্কের মধ্যে ডিপেনডেন্সি ম্যানেজমেন্ট করার জন্য Hibernate এর অ্যানোটেশন ব্যবহার করা হয়, যেমন @OneToMany, @ManyToOne, @OneToOne, এবং @ManyToMany।
এই ম্যাপিংগুলি ব্যবহার করে আপনি জাভা অবজেক্ট এবং ডাটাবেস টেবিলগুলোর মধ্যে সম্পর্ক তৈরি করতে পারবেন এবং আপনার অ্যাপ্লিকেশনে ডেটাবেস ইন্টারঅ্যাকশনের কার্যক্ষমতা এবং সুবিধা বৃদ্ধি করতে পারবেন।
Read more